#include <iostream>
#include <signal.h>
#include <unistd.h>
#include <stdlib.h>
#include <assert.h>

using namespace std;

void sigcb(int signumber)
{
    cout << "signal number is :" << signumber << endl;
}

void PrintSig(sigset_t &pending)
{
    for (int signo = 31; signo > 0; signo--)
    {
        if (sigismember(&pending, signo))
        {
            cout << "1";
        }
        else
        {
            cout << "0";
        }
    }
    cout << "" << endl;
}
int main()
{
    // cout << "pid:" << getpid() << endl;
    // struct sigaction newact;
    // newact.sa_handler = sigcb;
    // sigaction(2, &newact, nullptr);

    // signal(2, sigcb);
    // int cnt = 0;
    // while (true)
    // {
    //     sleep(1);
    //     cnt++;
    //     if(cnt%5==4)
    //     {
    //         raise(2);//发送2号信号给自己；
    //     }
    //     /* code */
    // }

    signal(2, sigcb);
    sigset_t block;
    sigemptyset(&block);
    sigaddset(&block, 2);
    sigaddset(&block, 40);
    while (true)
    {
        sigset_t pending;
        sigemptyset(&pending);
        int n = sigpending(&pending);
        assert(n == 0);
        PrintSig(pending);
        sleep(1);
        
        /* code */
    }

    return 0;
}